import cv2
import numpy as np

# 1. 图像输入
image_np = cv2.imread('lunkuo.jpg')

# 2. 灰度化 + 高斯模糊（减少噪点，让边缘更平滑）
image_np_gray = cv2.cvtColor(image_np, cv2.COLOR_BGR2GRAY)
image_np_gray = cv2.GaussianBlur(image_np_gray, (5, 5), 0)  # 高斯模糊，核大小5x5

# 3. 自适应二值化（微调参数）
image_np_thresh = cv2.adaptiveThreshold(
    image_np_gray,
    255,
    cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
    cv2.THRESH_BINARY_INV,
    7,   # 邻域大小改为7（奇数，缩小邻域提高边缘精度）
    1    # 偏移量改为1（减少过度二值化）
)

# 4. 寻找轮廓（保持RETR_TREE，调整轮廓近似方式）
contours, hierarchy = cv2.findContours(
    image_np_thresh,
    cv2.RETR_TREE,
    cv2.CHAIN_APPROX_SIMPLE  # 改为SIMPLE近似，压缩冗余点，让轮廓更简洁
)

# 5. 绘制轮廓（调整线宽和颜色，突出细节）
image_np = cv2.drawContours(
    image_np,
    contours,
    contourIdx=-1,
    color=(255, 255, 255),  # 红色轮廓，对比度更强
    thickness=1         # 线宽改为1，精细呈现边缘
)

# 6. 图片输出
cv2.imshow('lun_kuo', image_np)
cv2.imwrite('contour.jpg', image_np)
cv2.waitKey(0)
